home *** CD-ROM | disk | FTP | other *** search
/ Datatid 1998 #4 / 4-98 datatid cd-rom.iso / nyt / incube / IN3.MS_ / IN3.MS
Text File  |  1995-07-31  |  23KB  |  776 lines

  1. '**************************************************************************
  2. '*                       MSSetup For IN3
  3. '**************************************************************************
  4.  
  5. '$INCLUDE 'setupapi.inc'
  6. '$INCLUDE 'msdetect.inc'
  7.  
  8. ''Dialog ID's
  9. CONST WELCOME      = 100
  10. CONST ASKQUIT      = 200
  11. CONST EXITFAILURE  = 400
  12. CONST EXITQUIT     = 600
  13. CONST EXITSUCCESS  = 700
  14. CONST OPTIONS      = 800
  15. CONST APPHELP      = 900
  16. CONST AUDPATH      = 1000
  17. CONST LEXPATH      = 1100
  18. CONST SYSTEMPATH   = 1300
  19. CONST CUSTINST     = 6200
  20. CONST TOOBIG       = 6300
  21. CONST BADPATH      = 6400
  22.  
  23. ''Bitmap ID
  24. CONST LOGO         = 1
  25.  
  26. ''File Types
  27. CONST APPFILES     = 1
  28. CONST LEXFILES     = 2
  29. CONST AUDFILES     = 3
  30. ''Pseudo File types (controls Program Grouping)
  31. CONST ADDACC       = 4
  32. CONST CREATIN3     = 5
  33.  
  34.  
  35. GLOBAL DESTLEX$     ''Default destination directory.
  36. GLOBAL DESTAUD$     ''Default destination directory.
  37. GLOBAL WINDRIVE$    ''Windows drive letter.
  38. GLOBAL WINPATH$     ''Windows path.
  39. GLOBAL WINSYSTEM$   ''Windows system path
  40. GLOBAL INSTALLPATH$ ''Windows path.
  41. GLOBAL INSTALLSYS$  ''Windows system path
  42. GLOBAL OPT1OPT$     ''Option selection from OptFiles1 option dialog.
  43.  
  44. ''CustInst list symbol names
  45. GLOBAL APPNEEDS$    ''Option list costs per drive
  46. GLOBAL LEXICONEEDS$
  47. GLOBAL AUDIONEEDS$
  48. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  49. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  50.  
  51. ''Dialog list symbol names
  52. GLOBAL CHECKSTATES$
  53. GLOBAL STATUSTEXT$
  54. GLOBAL DRIVETEXT$
  55.  
  56.  
  57. DECLARE SUB AddOptFilesToCopyList (ftype%)
  58. DECLARE SUB RecalcOptFiles (ftype%)
  59. DECLARE SUB RecalcPath
  60. DECLARE SUB SetDriveStatus
  61. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  62.  
  63.  
  64.  
  65. INIT:
  66.     CUIDLL$ = "mscuistf.dll"            ''custom user interface dll
  67.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  68.     LEXICON$="DEMO"
  69.     IN3AR$="NO"
  70.     IN3LIC1$=""
  71.     IN3LIC2$=""
  72.     IN3LIC3$=""
  73.     IN3LIC4$=""
  74.     IN3LIC5$=""
  75.     IN3LIC6$=""
  76.  
  77.     SetBitmap CUIDLL$, LOGO
  78.     SetTitle "IN3 Voice Command System Setup"
  79.  
  80.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  81.     IF szInf$ = "" THEN
  82.         szInf$ = GetSymbolValue("STF_CWDDIR") + "IN3.INF"
  83.     END IF
  84.     ReadInfFile szInf$
  85.  
  86.     szInstallIni$ = GetSymbolValue("STF_CWDDIR") + "IN3INST.INI"
  87.     IF DoesFileExist( szInstallIni$, femRead ) THEN
  88.         LEXICON$=GetIniKeyString( szInstallIni$, "In3", "Lexicon" )
  89.         IN3AR$=GetIniKeyString( szInstallIni$, "In3", "In3ar" )
  90.     IN3LIC1$=GetIniKeyString( szInstallIni$, "License", "FullName" )
  91.     IN3LIC2$=GetIniKeyString( szInstallIni$, "License", "String1" )
  92.     IN3LIC3$=GetIniKeyString( szInstallIni$, "License", "String2" )
  93.     IN3LIC4$=GetIniKeyString( szInstallIni$, "License", "String3" )
  94.     IN3LIC5$=GetIniKeyString( szInstallIni$, "License", "RequestKey" )
  95.     IN3LIC6$=GetIniKeyString( szInstallIni$, "License", "LicenseKey" )
  96.     END IF
  97.  
  98.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  99.     WINPATH$ = GetWindowsDir
  100.     WINSYSTEM$ = GetWindowsSysDir
  101.  
  102.     OLDDLL$ = MakePath( WINSYSTEM$, "vrsdll.dll" )
  103.     IF DoesFileExist( OLDDLL$, femRead ) THEN
  104.         RemoveFile OLDDLL$, cmoNone
  105.     END IF
  106.     OLDDLL$ = MakePath( WINSYSTEM$, "vrsi.dll" )
  107.     IF DoesFileExist( OLDDLL$, femRead ) THEN
  108.         RemoveFile OLDDLL$, cmoNone
  109.     END IF
  110.     OLDDLL$ = MakePath( WINSYSTEM$, "vrl.dll" )
  111.     IF DoesFileExist( OLDDLL$, femRead ) THEN
  112.         RemoveFile OLDDLL$, cmoNone
  113.     END IF
  114.     OLDDLL$ = MakePath( WINSYSTEM$, "vrswave.dll" )
  115.     IF DoesFileExist( OLDDLL$, femRead ) THEN
  116.         RemoveFile OLDDLL$, cmoNone
  117.     END IF
  118.     OLDDLL$ = MakePath( WINPATH$, "vrl.dll" )
  119.     IF DoesFileExist( OLDDLL$, femRead ) THEN
  120.         RemoveFile OLDDLL$, cmoNone
  121.     END IF
  122.     OLDDLL$ = MakePath( WINPATH$, "vrsdemo.exe" )
  123.     IF DoesFileExist( OLDDLL$, femRead ) THEN
  124.         RemoveFile OLDDLL$, cmoNone
  125.     END IF
  126.     OLDDLL$ = MakePath( WINPATH$, "in3demo.exe" )
  127.     IF DoesFileExist( OLDDLL$, femRead ) THEN
  128.         RemoveFile OLDDLL$, cmoNone
  129.     END IF
  130.     OLDDLL$ = MakePath( WINPATH$, "in3.exe" )
  131.     IF DoesFileExist( OLDDLL$, femRead ) THEN
  132.         RemoveFile OLDDLL$, cmoNone
  133.     END IF
  134.     OLDDLL$ = MakePath( WINPATH$, "in3ar.exe" )
  135.     IF DoesFileExist( OLDDLL$, femRead ) THEN
  136.         RemoveFile OLDDLL$, cmoNone
  137.     END IF
  138.     OLDDLL$ = MakePath( WINPATH$, "vrs.exe" )
  139.     IF DoesFileExist( OLDDLL$, femRead ) THEN
  140.         RemoveFile OLDDLL$, cmoNone
  141.     END IF
  142.  
  143.     ini$ = MakePath(WINPATH$, "IN3.INI")
  144.  
  145.     IF DoesFileExist( ini$, femRead ) THEN
  146.         DESTLEX$=GetIniKeyString( ini$, "In3", "LexiconPath" )
  147.         LEXICON$=GetIniKeyString( ini$, "In3", "Lexicon" )
  148.         DESTAUD$=GetIniKeyString( ini$, "In3", "AudioPath" )
  149.         TOPMOST$=GetIniKeyString( ini$, "In3", "TopMost" )
  150.         AUDIOMSG$=GetIniKeyString( ini$, "In3", "AudioMsgs" )
  151.     END IF
  152.  
  153.     IF TOPMOST$ = "" THEN
  154.     TOPMOST$="1"
  155.     END IF
  156.  
  157.     IF DESTLEX$ = "" THEN
  158.         DESTLEX$ = WINDRIVE$ + ":\IN3\"
  159.     ELSEIF MID$(DESTLEX$, LEN(DESTLEX$), 1) <> "\" THEN
  160.         DESTLEX$ = DESTLEX$ + "\"
  161.     END IF
  162.  
  163.     IF DESTAUD$ = "" THEN
  164.         DESTAUD$ = DESTLEX$ + "AUDIO\"
  165.     ELSEIF MID$(DESTAUD$, LEN(DESTAUD$), 1) <> "\" THEN
  166.         DESTAUD$ = DESTAUD$ + "\"
  167.     END IF
  168.  
  169.  
  170.     INSTALLPATH$ = DESTLEX$
  171.     INSTALLSYS$ = DESTLEX$
  172.  
  173.     ''CustInst list symbols
  174.     CHECKSTATES$ = "CheckItemsState"
  175.     STATUSTEXT$  = "StatusItemsText"
  176.     DRIVETEXT$   = "DriveStatusText"
  177.     FOR i% = 1 TO 4 STEP 1
  178.         AddListItem CHECKSTATES$, "ON"
  179.     NEXT i%
  180.     FOR i% = 1 TO 3 STEP 1
  181.         AddListItem STATUSTEXT$, ""
  182.     NEXT i%
  183.     AddListItem STATUSTEXT$, INSTALLPATH$
  184.     AddListItem STATUSTEXT$, DESTLEX$
  185.     AddListItem STATUSTEXT$, DESTAUD$
  186.     FOR i% = 1 TO 9 STEP 1
  187.         AddListItem DRIVETEXT$, ""
  188.     NEXT i%
  189.  
  190.     ''Disk cost list symbols
  191.     APPNEEDS$   = "AppNeeds"
  192.     LEXICONEEDS$  = "LexiconNeeds"
  193.     AUDIONEEDS$  = "AudioNeeds"
  194.     EXTRACOSTS$ = "ExtraCosts"
  195.     BIGLIST$    = "BigList"
  196.     FOR i% = 1 TO 3 STEP 1
  197.         AddListItem BIGLIST$, ""
  198.     NEXT i%
  199.     FOR i% = 1 TO 26 STEP 1
  200.         AddListItem EXTRACOSTS$, "0"
  201.     NEXT i%
  202.  
  203.     ''File Option Variables
  204.     OPT1OPT$ = "4"
  205.  
  206.     RecalcPath
  207.     SetDriveStatus
  208.  
  209. '$IFDEF DEBUG
  210.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  211. '$ENDIF ''DEBUG
  212.  
  213.  
  214. WELCOME:
  215.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  216.     IF sz$ = "CONTINUE" THEN
  217.         UIPop 1
  218.     ELSE
  219.         GOSUB ASKQUIT
  220.         GOTO WELCOME
  221.     END IF
  222.  
  223.  
  224.  
  225. CUSTINST:
  226.     SetSymbolValue "RadioDefault", OPT1OPT$
  227.  
  228.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  229.     newopt$ = GetSymbolValue("ButtonChecked")
  230.  
  231.     IF sz$ = "CONTINUE" THEN
  232.         ''Install only if it will fit.
  233.         FOR i% = 1 TO 3 STEP 1
  234.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  235.                 GOSUB TOOBIG
  236.                 GOTO CUSTINST
  237.             END IF
  238.         NEXT i%
  239.         UIPop 1
  240.         GOTO INSTALL
  241.     ELSEIF sz$ = "CHK1" THEN
  242.         RecalcOptFiles APPFILES
  243.         SetDriveStatus
  244.         GOTO CUSTINST
  245.     ELSEIF sz$ = "CHK2" THEN
  246.         RecalcOptFiles LEXFILES
  247.         SetDriveStatus
  248.         GOTO CUSTINST
  249.     ELSEIF sz$ = "CHK3" THEN
  250.         RecalcOptFiles AUDFILES
  251.         SetDriveStatus
  252.         GOTO CUSTINST
  253.     ELSEIF sz$ = "CHK4" THEN
  254.         OPT1OPT$ = "4"
  255.         GOTO CUSTINST
  256.     ELSEIF sz$ = "CHK5" THEN
  257.         OPT1OPT$ = "5"
  258.         GOTO CUSTINST
  259.     ELSEIF sz$ = "BTN1" THEN
  260.         GOTO GETSYSPATH
  261.     ELSEIF sz$ = "BTN2" THEN
  262.         GOTO GETLEXPATH
  263.     ELSEIF sz$ = "BTN3" THEN
  264.         GOTO GETAUDPATH
  265.     ELSEIF sz$ = "REACTIVATE" THEN
  266.         RecalcPath
  267.         SetDriveStatus
  268.         GOTO CUSTINST
  269.     ELSE
  270.         GOSUB ASKQUIT
  271.         GOTO CUSTINST
  272.     END IF
  273.  
  274.  
  275.  
  276. INSTALL:
  277.     ClearCopyList
  278.     AddOptFilesToCopyList APPFILES
  279.     AddOptFilesToCopyList LEXFILES
  280.     AddOptFilesToCopyList AUDFILES
  281.     CreateDir DESTLEX$, cmoNone
  282.     CreateDir DESTAUD$, cmoNone
  283.     CopyFilesInCopyList
  284.  
  285.     IF INSTALLPATH$ <> WINPATH$ THEN
  286.         iniold$ = MakePath( WINPATH$, "IN3.INI" )
  287.         IF DoesFileExist( iniold$, femRead ) THEN
  288.             ini$ = MakePath( INSTALLPATH$, "IN3.INI" )
  289.         CopyFile iniold$, ini$, cmoNone, 0
  290.         RemoveFile iniold$, cmoNone
  291.     END IF
  292.     END IF
  293.  
  294.     ini$ = MakePath( INSTALLPATH$, "IN3.INI" )
  295.     iniold$ = MakePath( INSTALLPATH$, "IN3INI.INI" )
  296.  
  297.     IF DoesFileExist( ini$, femRead ) THEN
  298.     RemoveFile iniold$, cmoNone
  299.     ELSE
  300.     RenameFile iniold$, "IN3.INI"
  301.     END IF
  302.  
  303.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  304.         CreateIniKeyValue ini$, "In3", "TopMost", TOPMOST$ , cmoNone
  305.     END IF
  306.  
  307.     IF GetListItem(CHECKSTATES$, LEXFILES) = "ON" THEN
  308.         CreateIniKeyValue ini$, "In3", "Lexicon", LEXICON$ , cmoNone
  309.         CreateIniKeyValue ini$, "In3", "Path", MakePath( DESTLEX$, "" ) , cmoNone
  310.         CreateIniKeyValue ini$, "In3", "LexiconPath", MakePath( DESTLEX$, "" ) , cmoOverwrite
  311.         CreateIniKeyValue ini$, "In3", "InstallPath", MakePath( INSTALLPATH$, "" ) , cmoOverwrite
  312.     END IF
  313.  
  314.     IF IN3LIC1$ <> "" THEN
  315.     CreateIniKeyValue ini$, "License", "FullName", IN3LIC1$, cmoNone
  316.     CreateIniKeyValue ini$, "License", "String1", IN3LIC2$, cmoNone
  317.     CreateIniKeyValue ini$, "License", "String2", IN3LIC3$, cmoNone
  318.     CreateIniKeyValue ini$, "License", "String3", IN3LIC4$, cmoNone
  319.     CreateIniKeyValue ini$, "License", "RequestKey", IN3LIC5$, cmoNone
  320.     CreateIniKeyValue ini$, "License", "LicenseKey", IN3LIC6$, cmoNone
  321.     END IF
  322.  
  323.     IF GetListItem(CHECKSTATES$, AUDFILES) = "ON" THEN
  324.         CreateIniKeyValue ini$, "In3", "AudioMsg", "1" , cmoNone
  325.         CreateIniKeyValue ini$, "In3", "AudioPath", MakePath( DESTAUD$, "" ) , cmoOverwrite
  326.     ELSE
  327.         CreateIniKeyValue ini$, "In3", "Audio", "0" , cmoNone
  328.     END IF
  329.  
  330.     IF GetListItem(CHECKSTATES$, ADDACC) = "ON" THEN
  331.     PMGROUP$="Accessories"
  332.     END IF
  333.  
  334.     IF GetListItem(CHECKSTATES$, CREATIN3 ) = "ON" THEN
  335.     PMGROUP$="IN3"
  336.         CreateProgmanGroup "IN3", "", cmoNone
  337.     END IF
  338.  
  339.     ShowProgmanGroup  PMGROUP$, 1, cmoNone
  340.  
  341.     IF IN3AR$ = "Yes" THEN
  342.     IN3AR$ = MakePath( INSTALLPATH$, "in3ar.exe" )
  343.     IF DoesFileExist( IN3AR$, femRead ) THEN
  344.                CreateProgmanItem PMGROUP$, "IN3ar", IN3AR$, "", cmoOverwrite
  345.     END IF
  346.     END IF
  347.  
  348.     CreateProgmanItem PMGROUP$, "IN3", MakePath( INSTALLPATH$, "in3.exe "), "", cmoOverwrite
  349.  
  350. QUIT:
  351.     ON ERROR GOTO ERRQUIT
  352.  
  353.     IF ERR = 0 THEN
  354.         dlg% = EXITSUCCESS
  355.     ELSEIF ERR = STFQUIT THEN
  356.         dlg% = EXITQUIT
  357.     ELSE
  358.         dlg% = EXITFAILURE
  359.     END IF
  360. QUITL1:
  361.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  362.     IF sz$ = "REACTIVATE" THEN
  363.         GOTO QUITL1
  364.     END IF
  365.     UIPop 1
  366.  
  367.     END
  368.  
  369. ERRQUIT:
  370.     i% = DoMsgBox("Setup sources were corrupted, call (770)813-8030!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  371.     END
  372.  
  373.  
  374.  
  375. GETSYSPATH:
  376.     SetSymbolValue "EditTextIn", INSTALLPATH$
  377.     SetSymbolValue "EditFocus", "END"
  378. GETSYSPATHL1:
  379.     sz$ = UIStartDlg(CUIDLL$, SYSTEMPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  380.  
  381.     IF sz$ = "CONTINUE" THEN
  382.         olddest$ = INSTALLPATH$
  383.         INSTALLPATH$ = GetSymbolValue("EditTextOut")
  384.  
  385.         IF MID$(INSTALLPATH$, LEN(INSTALLPATH$), 1) <> "\" THEN
  386.             INSTALLPATH$ = INSTALLPATH$ + "\"
  387.         END IF
  388.  
  389.         ''Validate new path.
  390.         IF IsDirWritable(INSTALLPATH$) = 0 THEN
  391.             GOSUB BADPATH
  392.             GOTO GETSYSPATHL1
  393.         END IF
  394.         UIPop 1
  395.  
  396.         ''Truncate display if too long.
  397.         IF LEN(INSTALLPATH$) > 23 THEN
  398.             ReplaceListItem STATUSTEXT$, 4, MID$(INSTALLPATH$, 1, 23)+"..."
  399.         ELSE
  400.             ReplaceListItem STATUSTEXT$, 4, INSTALLPATH$
  401.         END IF
  402.  
  403.     IF INSTALLPATH$ = WINPATH$ THEN
  404.         INSTALLSYS$ = WINSYSTEM$
  405.     ELSE
  406.         INSTALLSYS$ = INSTALLPATH$
  407.     END IF
  408.  
  409.         ''Recalc if path changed.
  410.         IF (olddest$ <> INSTALLPATH$) AND (olddest$ <> INSTALLPATH$+"\") AND (olddest$+"\" <> INSTALLPATH$) THEN
  411.  
  412.             IF DESTAUD$ = olddest$ THEN
  413.                 DESTAUD$ = INSTALLPATH$
  414.             ELSEIF olddest$ = MID$(DESTAUD$, 1, LEN(olddest$) ) THEN
  415.                 i% = LEN(DESTAUD$) - LEN(olddest$)
  416.                 olddest$ = MID$(DESTAUD$, LEN(olddest$) + 1, i%)
  417.                 DESTAUD$ = MakePath( INSTALLPATH$, olddest$ )
  418.             END IF
  419.  
  420.             ''Truncate display if too long.
  421.             IF LEN(DESTAUD$) > 23 THEN
  422.                 ReplaceListItem STATUSTEXT$, 6, MID$(DESTAUD$, 1, 23)+"..."
  423.             ELSE
  424.                 ReplaceListItem STATUSTEXT$, 6, DESTAUD$
  425.             END IF
  426.  
  427.             IF DESTLEX$ = olddest$ THEN
  428.                 DESTLEX$ = INSTALLPATH$
  429.             ELSEIF olddest$ = MID$(DESTLEX$, 1, LEN(olddest$) ) THEN
  430.                 i% = LEN(DESTLEX$) - LEN(olddest$)
  431.                 olddest$ = MID$(DESTLEX$, LEN(olddest$) + 1, i%)
  432.                 DESTLEX$ = MakePath( INSTALLPATH$, olddest$ )
  433.             END IF
  434.  
  435.             ''Truncate display if too long.
  436.             IF LEN(DESTLEX$) > 23 THEN
  437.                 ReplaceListItem STATUSTEXT$, 5, MID$(DESTLEX$, 1, 23)+"..."
  438.             ELSE
  439.                 ReplaceListItem STATUSTEXT$, 5, DESTLEX$
  440.             END IF
  441.  
  442.             RecalcPath
  443.             SetDriveStatus
  444.         END IF
  445.  
  446.         olddest$ = ""
  447.         GOTO CUSTINST
  448.     ELSEIF sz$ = "REACTIVATE" THEN
  449.         RecalcPath
  450.         SetDriveStatus
  451.         GOTO GETSYSPATHL1
  452.     ELSEIF sz$ = "EXIT" THEN
  453.         GOSUB ASKQUIT
  454.         GOTO GETSYSPATHL1
  455.     ELSE
  456.         UIPop 1
  457.         GOTO CUSTINST
  458.     END IF
  459.  
  460.  
  461. GETLEXPATH:
  462.     SetSymbolValue "EditTextIn", DESTLEX$
  463.     SetSymbolValue "EditFocus", "END"
  464. GETLEXPATHL1:
  465.     sz$ = UIStartDlg(CUIDLL$, LEXPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  466.  
  467.     IF sz$ = "CONTINUE" THEN
  468.         olddest$ = DESTLEX$
  469.         DESTLEX$ = GetSymbolValue("EditTextOut")
  470.  
  471.         IF MID$(DESTLEX$, LEN(DESTLEX$), 1) <> "\" THEN
  472.             DESTLEX$ = DESTLEX$ + "\"
  473.         END IF
  474.  
  475.         ''Validate new path.
  476.         IF IsDirWritable(DESTLEX$) = 0 THEN
  477.             GOSUB BADPATH
  478.             GOTO GETLEXPATHL1
  479.         END IF
  480.         UIPop 1
  481.  
  482.         ''Truncate display if too long.
  483.         IF LEN(DESTLEX$) > 23 THEN
  484.             ReplaceListItem STATUSTEXT$, 5, MID$(DESTLEX$, 1, 23)+"..."
  485.         ELSE
  486.             ReplaceListItem STATUSTEXT$, 5, DESTLEX$
  487.         END IF
  488.  
  489.         ''Recalc if path changed.
  490.         IF (olddest$ <> DESTLEX$) AND (olddest$ <> DESTLEX$+"\") AND (olddest$+"\" <> DESTLEX$) THEN
  491.  
  492.             IF DESTAUD$ = olddest$ THEN
  493.                 DESTAUD$ = DESTLEX$
  494.             ELSEIF olddest$ = MID$(DESTAUD$, 1, LEN(olddest$) ) THEN
  495.                 i% = LEN(DESTAUD$) - LEN(olddest$)
  496.                 olddest$ = MID$(DESTAUD$, LEN(olddest$) + 1, i%)
  497.                 DESTAUD$ = MakePath( DESTLEX$, olddest$ )
  498.             END IF
  499.  
  500.             ''Truncate display if too long.
  501.             IF LEN(DESTAUD$) > 23 THEN
  502.                 ReplaceListItem STATUSTEXT$, 6, MID$(DESTAUD$, 1, 23)+"..."
  503.             ELSE
  504.                 ReplaceListItem STATUSTEXT$, 6, DESTAUD$
  505.             END IF
  506.  
  507.             RecalcPath
  508.             SetDriveStatus
  509.         END IF
  510.  
  511.         olddest$ = ""
  512.         GOTO CUSTINST
  513.     ELSEIF sz$ = "REACTIVATE" THEN
  514.         RecalcPath
  515.         SetDriveStatus
  516.         GOTO GETLEXPATHL1
  517.     ELSEIF sz$ = "EXIT" THEN
  518.         GOSUB ASKQUIT
  519.         GOTO GETLEXPATHL1
  520.     ELSE
  521.         UIPop 1
  522.         GOTO CUSTINST
  523.     END IF
  524.  
  525.  
  526. GETAUDPATH:
  527.     SetSymbolValue "EditTextIn", DESTAUD$
  528.     SetSymbolValue "EditFocus", "END"
  529. GETAUDPATHL1:
  530.     sz$ = UIStartDlg(CUIDLL$, AUDPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  531.  
  532.     IF sz$ = "CONTINUE" THEN
  533.         olddest$ = DESTAUD$
  534.         DESTAUD$ = GetSymbolValue("EditTextOut")
  535.  
  536.         IF MID$(DESTAUD$, LEN(DESTAUD$), 1) <> "\" THEN
  537.             DESTAUD$ = DESTAUD$ + "\"
  538.         END IF
  539.  
  540.         ''Validate new path.
  541.         IF IsDirWritable(DESTAUD$) = 0 THEN
  542.             GOSUB BADPATH
  543.             GOTO GETAUDPATHL1
  544.         END IF
  545.         UIPop 1
  546.  
  547.         ''Truncate display if too long.
  548.         IF LEN(DESTAUD$) > 23 THEN
  549.             ReplaceListItem STATUSTEXT$, 6, MID$(DESTAUD$, 1, 23)+"..."
  550.         ELSE
  551.             ReplaceListItem STATUSTEXT$, 6, DESTAUD$
  552.         END IF
  553.  
  554.         ''Recalc if path changed.
  555.         IF (olddest$ <> DESTAUD$) AND (olddest$ <> DESTAUD$+"\") AND (olddest$+"\" <> DESTAUD$) THEN
  556.             RecalcPath
  557.             SetDriveStatus
  558.         END IF
  559.  
  560.         olddest$ = ""
  561.         GOTO CUSTINST
  562.     ELSEIF sz$ = "REACTIVATE" THEN
  563.         RecalcPath
  564.         SetDriveStatus
  565.         GOTO GETAUDPATHL1
  566.     ELSEIF sz$ = "EXIT" THEN
  567.         GOSUB ASKQUIT
  568.         GOTO GETAUDPATHL1
  569.     ELSE
  570.         UIPop 1
  571.         GOTO CUSTINST
  572.     END IF
  573.  
  574.  
  575.  
  576. TOOBIG:
  577.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  578.     IF sz$ = "REACTIVATE" THEN
  579.         RecalcPath
  580.         SetDriveStatus
  581.         GOTO TOOBIG
  582.     END IF
  583.     UIPop 1
  584.     RETURN
  585.  
  586.  
  587.  
  588. BADPATH:
  589.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  590.     IF sz$ = "REACTIVATE" THEN
  591.         RecalcPath
  592.         SetDriveStatus
  593.         GOTO BADPATH
  594.     END IF
  595.     UIPop 1
  596.     RETURN
  597.  
  598.  
  599.  
  600. ASKQUIT:
  601.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  602.  
  603.     IF sz$ = "EXIT" THEN
  604.         UIPopAll
  605.         ERROR STFQUIT
  606.     ELSEIF sz$ = "REACTIVATE" THEN
  607.         GOTO ASKQUIT
  608.     ELSE
  609.         UIPop 1
  610.     END IF
  611.     RETURN
  612.  
  613.  
  614.  
  615. '**
  616. '** Purpose:
  617. '**     Adds the specified option files to the copy list.
  618. '** Arguments:
  619. '**     ftype%  - type of files to add, one of the following:
  620. '**             APPFILES, LEXFILES, AUDFILES
  621. '** Returns:
  622. '**     none.
  623. '*************************************************************************
  624. SUB AddOptFilesToCopyList (ftype%) STATIC
  625.  
  626.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  627.         SrcDir$ = GetSymbolValue("STF_SRCDIR")
  628.         IF ftype% = APPFILES THEN
  629.             AddSectionFilesToCopyList "AppFiles", SrcDir$, INSTALLPATH$
  630.             AddSectionFilesToCopyList "SysFiles", SrcDir$, INSTALLSYS$
  631.             AddSectionFilesToCopyList "DocFiles", SrcDir$, DESTLEX$
  632.         ELSEIF ftype% = LEXFILES THEN
  633.             AddSectionFilesToCopyList "Lexicons", SrcDir$, DESTLEX$
  634.         ELSEIF ftype% = AUDFILES THEN
  635.             AddSectionFilesToCopyList "AudioFiles", SrcDir$, DESTAUD$
  636.         END IF
  637.         SrcDir$ = ""
  638.     END IF
  639. END SUB
  640.  
  641.  
  642. '**
  643. '** Purpose:
  644. '**     Recalculates disk space for the given option files and sets
  645. '**     the status info symbol "StatusItemsText".
  646. '** Arguments:
  647. '**     ftype% - type of files to add, one of the following:
  648. '**             APPFILES, LEXFILES, AUDFILES
  649. '** Returns:
  650. '**     none.
  651. '*************************************************************************
  652. SUB RecalcOptFiles (ftype%) STATIC
  653.     CursorSave% = ShowWaitCursor()
  654.     ClearCopyList
  655.     AddOptFilesToCopyList ftype%
  656.  
  657.     fExtra% = 0
  658.     IF ftype% = APPFILES THEN
  659.         ListSym$ = APPNEEDS$
  660.         IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  661.             ''Add extra cost to Windows drive for ini/progman, etc.
  662.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  663.             ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  664.             fExtra% = 1
  665.         END IF
  666.     ELSEIF ftype% = LEXFILES THEN
  667.         ListSym$ = LEXICONEEDS$
  668.     ELSEIF ftype% = AUDFILES THEN
  669.         ListSym$ = AUDIONEEDS$
  670.     END IF
  671.  
  672.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  673.  
  674.     cost& = 0
  675.     FOR i% = 1 TO 26 STEP 1
  676.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  677.     NEXT i%
  678.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  679.  
  680.     IF StillNeed& > 0 THEN
  681.         ReplaceListItem BIGLIST$, ftype%, "YES"
  682.     ELSE
  683.         ReplaceListItem BIGLIST$, ftype%, ""
  684.     END IF
  685.  
  686.     IF fExtra% THEN
  687.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  688.     END IF
  689.     RestoreCursor CursorSave%
  690.     ListSym$ = ""
  691. END SUB
  692.  
  693.  
  694. '**
  695. '** Purpose:
  696. '**     Recalculates disk space and sets option status info according
  697. '**     to the current destination path.
  698. '** Arguments:
  699. '**     none.
  700. '** Returns:
  701. '**     none.
  702. '*************************************************************************
  703. SUB RecalcPath STATIC
  704.  
  705.     CursorSave% = ShowWaitCursor()
  706.  
  707.     RecalcOptFiles APPFILES
  708.     RecalcOptFiles LEXFILES
  709.     RecalcOptFiles AUDFILES
  710.  
  711.     RestoreCursor CursorSave%
  712. END SUB
  713.  
  714.  
  715. '**
  716. '** Purpose:
  717. '**     Sets drive status info according to latest disk space calcs.
  718. '** Arguments:
  719. '**     none.
  720. '** Returns:
  721. '**     none.
  722. '*************************************************************************
  723. SUB SetDriveStatus STATIC
  724.  
  725.     drive$ = MID$(DESTLEX$, 1, 1)
  726.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  727.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(LEXICONEEDS$, ndrive%)) + VAL(GetListItem(AUDIONEEDS$, ndrive%))
  728.     free& = GetFreeSpaceForDrive(drive$)
  729.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  730.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  731.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  732.  
  733.     IF drive$ = WINDRIVE$ THEN
  734.         ReplaceListItem DRIVETEXT$, 4, ""
  735.         ReplaceListItem DRIVETEXT$, 5, ""
  736.         ReplaceListItem DRIVETEXT$, 6, ""
  737.     ELSE
  738.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  739.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(LEXICONEEDS$, ndrive%)) + VAL(GetListItem(AUDIONEEDS$, ndrive%))
  740.         IF cost& = 0 THEN
  741.             ReplaceListItem DRIVETEXT$, 4, ""
  742.             ReplaceListItem DRIVETEXT$, 5, ""
  743.             ReplaceListItem DRIVETEXT$, 6, ""
  744.         ELSE
  745.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  746.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  747.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  748.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  749.         END IF
  750.     END IF
  751. END SUB
  752.  
  753.  
  754. '**
  755. '** Purpose:
  756. '**     Appends a file name to the end of a directory path,
  757. '**     inserting a backslash character as needed.
  758. '** Arguments:
  759. '**     szDir$  - full directory path (with optional ending "\")
  760. '**     szFile$ - filename to append to directory
  761. '** Returns:
  762. '**     Resulting fully qualified path name.
  763. '*************************************************************************
  764. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  765.     IF szDir$ = "" THEN
  766.         MakePath = szFile$
  767.     ELSEIF szFile$ = "" THEN
  768.         MakePath = szDir$
  769.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  770.         MakePath = szDir$ + szFile$
  771.     ELSE
  772.         MakePath = szDir$ + "\" + szFile$
  773.     END IF
  774. END FUNCTION
  775.  
  776.